package pe.gob.mimp.web.controller;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import pe.gob.mimp.model.*;
import pe.gob.mimp.service.*;

@Controller
@RequestMapping(value = "/casosocial")
public class CasoSocialController {
	@Autowired
	private CombosService combos;
	@Autowired
	private PersonaService personaService;
	// @Autowired
	private Persona solicitante;
	// @Autowired
	private Persona beneficiario;
	@Autowired
	private CasoSocialService casoSocialService;
	@Autowired
	private MenuUsuarioService menuUsuarioService;

	@RequestMapping(method = RequestMethod.GET)
	public String showCasoForm(Model model,@RequestParam(value = "idCasosocial", required = false) Long idCasosocial,HttpServletRequest request) {
		CasoSocial casoSocial = new CasoSocial();
		List<TablaParametrica> tipoDocumentoIdentidad;
		List<TablaParametrica> tipoCaso;
		List<TablaParametrica> medio;
		List<TablaParametrica> departamento;
		List<Persona> responsable;
		List<TablaParametrica> motivos = null;
		List<TablaParametrica> provinciasSolicitante = null;
		List<TablaParametrica> distritosSolicitante = null;
		List<TablaParametrica> provinciasBeneficiario = null;
		List<TablaParametrica> distritosBeneficiario = null;
		HttpSession session = request.getSession();
		List<MenuUsuario> menu;
		
		if(session.getAttribute("login") == null){
			return "redirect:login";
		}
		menu = menuUsuarioService.getMenuUsuarioPorUserName((String) session.getAttribute("login"));
		System.out.println(idCasosocial);
		if (idCasosocial != null){
			casoSocial = casoSocialService.getCasoSocialPorId(idCasosocial);
			
			SimpleDateFormat formatoDeFecha = new SimpleDateFormat("dd/MM/yyyy");
			if (casoSocial.getIdSolicitante().getFechaNacimiento() != null)
				casoSocial.setFechaNacimiento(formatoDeFecha.format(casoSocial.getIdSolicitante().getFechaNacimiento()));
			if (casoSocial.getIdBeneficiario().getFechaNacimiento() != null)
				casoSocial.setBfechaNacimiento(formatoDeFecha.format(casoSocial.getIdBeneficiario().getFechaNacimiento()));
			if (casoSocial.getFechaRegistro() != null)
				casoSocial.setFechaRegistroCaso(formatoDeFecha.format(casoSocial.getFechaRegistro()));
			
			if (casoSocial.getIdSolicitante().getIdProvincia() != null) {
				provinciasSolicitante = combos.getListaProvincia(combos.getTablaParametricaPorId(casoSocial.getIdSolicitante().getIdDepartamento()).getCodigo());
			}
			if (casoSocial.getIdSolicitante().getIdDistrito() != null) {
				distritosSolicitante = combos.getListaDistrito(combos.getTablaParametricaPorId(casoSocial.getIdSolicitante().getIdProvincia()).getCodigo());
			}
			if (casoSocial.getIdBeneficiario().getIdProvincia() != null) {
				provinciasBeneficiario = combos.getListaProvincia(combos.getTablaParametricaPorId(casoSocial.getIdBeneficiario().getIdDepartamento()).getCodigo());
			}
			if (casoSocial.getIdBeneficiario().getIdDistrito() != null) {
				distritosBeneficiario = combos.getListaDistrito(combos.getTablaParametricaPorId(casoSocial.getIdBeneficiario().getIdProvincia()).getCodigo());
			}
//			if (casoSocial.getIdMotivo() != null) {
//				motivos = combos.getListaMotivo();
//			}
		}
		tipoDocumentoIdentidad = combos.getListaTipoDocumentoIdentidad();
		tipoCaso = combos.getListaTipoCaso();
		medio = combos.getListaMedioIngreso();
                motivos = combos.getListaMotivo();
		responsable = combos.getListaResponsable();
		departamento = combos.getListaDepartamento();
		motivos = combos.getListaMotivo();
		
		model.addAttribute("tipoDocumentoIdentidad", tipoDocumentoIdentidad);
		model.addAttribute("motivos", motivos);
		model.addAttribute("departamento", departamento);
		model.addAttribute("provinciasSolicitante", provinciasSolicitante);
		model.addAttribute("distritosSolicitante", distritosSolicitante);
		model.addAttribute("provinciasBeneficiario", provinciasBeneficiario);
		model.addAttribute("distritosBeneficiario", distritosBeneficiario);
		model.addAttribute("medio", medio);
		model.addAttribute("tipoCaso", tipoCaso);
		model.addAttribute("medio", medio);
		model.addAttribute("responsable", responsable);
		model.addAttribute("casoSocial", casoSocial);
		model.addAttribute("menu", menu);
		model.addAttribute("opciones", menu);
		System.out.println(casoSocial.getIdCasosocial());
		return "casosocial";
	}

	@RequestMapping(method = RequestMethod.POST)
	public String grabaFormulario(Model model, CasoSocial casoSocial) {
		Date fecha;
		System.out.println("Graba Caso Social");

		Persona solicitanteWeb = casoSocial.getIdSolicitante();
		Persona beneficiarioWeb = casoSocial.getIdBeneficiario();
		
		// Busca si Existe el Solicitante
		solicitante = personaService.getPersonaPorTipoDocumento(solicitanteWeb.getIdTipodocumento(), solicitanteWeb.getNroDocumento());
		if (solicitante != null) {
			System.out.println("Solicitante existe.");
		} else {
			solicitante = new Persona();
		}
		// Busca si Existe el Beneficiario
		beneficiario = personaService.getPersonaPorTipoDocumento(beneficiarioWeb.getIdTipodocumento(), beneficiarioWeb.getNroDocumento());
		if (beneficiario != null) {
			System.out.println("Beneficiario existe.");
		} else {
			beneficiario = new Persona();
		}

		solicitante.setApellidosNombres(solicitanteWeb.getApellidosNombres());
		solicitante.setEmail(solicitanteWeb.getEmail());
		if (casoSocial.getFechaNacimiento() != null) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			try {
				fecha = dateFormat.parse(casoSocial.getFechaNacimiento());
				solicitante.setFechaNacimiento(fecha);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		solicitante.setIdDepartamento(solicitanteWeb.getIdDepartamento());
		solicitante.setIdProvincia(solicitanteWeb.getIdProvincia());
		solicitante.setIdDistrito(solicitanteWeb.getIdDistrito());
		solicitante.setIdTipodocumento(solicitanteWeb.getIdTipodocumento());
		solicitante.setIdTipopersona(1L);
		solicitante.setNroDocumento(solicitanteWeb.getNroDocumento());
		solicitante.setTelefono(solicitanteWeb.getTelefono());

		beneficiario.setApellidosNombres(beneficiarioWeb.getApellidosNombres());
		beneficiario.setEmail(solicitanteWeb.getEmail());
		if (casoSocial.getBfechaNacimiento() != null) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			try {
				fecha = dateFormat.parse(casoSocial.getBfechaNacimiento());
				System.out.println(casoSocial.getBfechaNacimiento());
				System.out.println(fecha);
				beneficiario.setFechaNacimiento(fecha);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		beneficiario.setIdDepartamento(beneficiarioWeb.getIdDepartamento());
		beneficiario.setIdProvincia(beneficiarioWeb.getIdProvincia());
		beneficiario.setIdDistrito(beneficiarioWeb.getIdDistrito());
		beneficiario.setDireccion(beneficiarioWeb.getDireccion());
		beneficiario.setIdTipodocumento(beneficiarioWeb.getIdTipodocumento());
		beneficiario.setIdTipopersona(1L);
		beneficiario.setNroDocumento(beneficiarioWeb.getNroDocumento());
		beneficiario.setTelefono(beneficiarioWeb.getTelefono());
		
		if (casoSocial.getFechaRegistroCaso() != null) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			try {
				fecha = dateFormat.parse(casoSocial.getFechaRegistroCaso());
				casoSocial.setFechaRegistro(fecha);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		personaService.savePersona(solicitante);
		personaService.savePersona(beneficiario);
		casoSocial.setIdSolicitante(solicitante);
		casoSocial.setIdBeneficiario(beneficiario);
		casoSocialService.saveCasoSocial(casoSocial);
		
		return "redirect:casosocial";
	}

	@RequestMapping(value = "/provincias", method = RequestMethod.GET)
	public @ResponseBody
	List<TablaParametrica> detProvincias(
			@RequestParam(value = "idDepartamento", required = true) Long idDepartamento) {
		TablaParametrica departamento;
		List<TablaParametrica> provincia = null;
		if (idDepartamento != 0) {
			departamento = combos.getDepartamentoPorId(idDepartamento);
			provincia = combos.getListaProvincia(departamento.getCodigo());
		}
		return provincia;
	}

	@RequestMapping(value = "/distritos", method = RequestMethod.GET)
	public @ResponseBody
	List<TablaParametrica> getDistritos(
			@RequestParam(value = "idProvincia", required = true) Long idProvincia) {
		TablaParametrica provincia;
		List<TablaParametrica> distrito = null;
		if (idProvincia != 0) {
			provincia = combos.getProvinciaPorId(idProvincia);
			distrito = combos.getListaDistrito(provincia.getCodigo());
		}
		return distrito;
	}
	
	@RequestMapping(value = "/validaRegistroCasoSocial", method = RequestMethod.GET)
	public @ResponseBody
	ArrayList validaRegistroCasoSocial(
			@RequestParam(value = "fieldId", required = true) String fieldId,
			@RequestParam(value = "fieldValue", required = true) Long idTipocaso,
			@RequestParam(value = "bidTipodocumento", required = true) Long idTipodocumento,
			@RequestParam(value = "bnroDocumento", required = true) String nroDocumento) {
		ArrayList a = new ArrayList();
		TablaParametrica tabla;
		CasoSocialBusqueda casoSocialBusqueda = new CasoSocialBusqueda();
		Calendar c = Calendar.getInstance();
		
		tabla = combos.getTablaParametricaPorId(idTipocaso);
		a.add(fieldId);
		
		if (tabla.getCodigo() == 1) {
			System.out.println("Validando Solicitante.");
			casoSocialBusqueda.setIdTipodocumento(idTipodocumento);
			casoSocialBusqueda.setNroDocumento(nroDocumento);
			casoSocialBusqueda.setIdTipocaso(idTipocaso);
			casoSocialBusqueda.setAnoRegistro(Long.valueOf(c.get(Calendar.YEAR)));
			if (casoSocialService.buscaCasoSocial(casoSocialBusqueda).size() == 0){
				System.out.println("no hay casos.");
				a.add(true);
			}else{
				System.out.println("si hay casos.");
				a.add(false);
			}
		} else {
			solicitante = new Persona();
			a.add(true);
		}
		
		return a;
	}
	
//	@RequestMapping(value = "/motivos", method = RequestMethod.GET)
//	public @ResponseBody
//	List<TablaParametrica> getMotivoss(
//			@RequestParam(value = "idTipoCaso", required = true) Long idTipoCaso) {
//		TablaParametrica motivos;
//		List<TablaParametrica> distrito = null;
//		if (idTipoCaso != 0) {
//			motivos = combos.getProvinciaPorId(idTipoCaso);
//			distrito = combos.getListaMotivo(motivos.getCodigo());
//		}
//		return distrito;
//	}
}
